package top.hekun.study.shell.command;

import org.springframework.shell.Availability;
import org.springframework.shell.standard.ShellComponent;
import org.springframework.shell.standard.ShellMethod;
import org.springframework.shell.standard.ShellMethodAvailability;
import org.springframework.shell.standard.ShellOption;

@ShellComponent
public class HkCommand {
    private boolean isTestEnabled = false;

    @ShellMethod("回响命令,输入什么返回什么")
    public String echo(
            @ShellOption(value = {"--str", "-s"}, defaultValue = "默认值") String str
//            ,@Size(min = 6, max = 16, message = "请输入6-16范围内的数据") int i 需要验证器 懒得引入新的依赖包
    ) {
        return "* " + str + " *";
    }

    @ShellMethod(key = {"demo", "示例"}, value = "帮助信息")
    public String demo() {
        return "(* _ *)";
    }

    @ShellMethod("开启 test")
    public String enableTest() {
        isTestEnabled = true;
        return "开启test";
    }


    /**
     * 可以使用 @ShellMethodAvailability 注解指定该命令是否可用的校验方法,
     *
     * @return
     */
    @ShellMethod("关闭 test")
    @ShellMethodAvailability({"testAvailability"})
    public String disableTest() {
        isTestEnabled = false;
        return "关闭test";
    }

    @ShellMethod("test")
    public String test() {
        return "运行test";
    }

    /**
     * 命名方法为 xxxAvailability
     * xxx为需要限制的方法名称
     * 使用 @ShellMethodAvailability指定demo方法限制的命令
     *
     * @return
     */
    @ShellMethodAvailability({"demo"})
    public Availability testAvailability() {
        return isTestEnabled ? Availability.available() : Availability.unavailable("禁止运行");
    }
}
